/*
 * @Author: Swance
 * @Date: 2024-02-29
 * @Description: 栈数据结构
 */
class Stack<T = any> {
  // 定义一个数组，用于存储元素
  private data: T[] = [];

  constructor(data?: T[]) {
    this.data = data || [];
  }

  // 入栈
  push(element: T): void {
    this.data.push(element);
  }

  // 出栈
  pop(): T | undefined {
    return this.data.pop();
  }

  // 返回栈顶对象
  peek(): T | undefined {
    return this.data[this.data.length - 1];
  }

  // 判断栈是否为空
  isEmpty(): boolean {
    return this.data.length === 0;
  }

  // 返回栈中个数
  size(): number {
    return this.data.length;
  }

  // 清空栈
  clear() {
    this.data.length = 0;
  }
}

export default Stack;
